package com.microcdyUser.service.impl;
import com.microcdyUser.dao.SysDeptMapper;
import com.microcdy.sys.pojo.SysDept;
import com.microcdyUser.service.SysDeptService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import tk.mybatis.mapper.entity.Example;
import java.util.List;
/****
 * @Author:cdy
 * @Description:SysDept业务层接口实现类
 * @Date 2019/6/14 0:16
 *****/
@Service
public class SysDeptServiceImpl implements SysDeptService {

    @Autowired
    private SysDeptMapper sysDeptMapper;


    /**
     * SysDept条件+分页查询
     * @param sysDept 查询条件
     * @param page 页码
     * @param size 页大小
     * @return 分页结果
     */
    @Override
    public PageInfo<SysDept> findPage(SysDept sysDept, int page, int size){
        //分页
        PageHelper.startPage(page,size);
        //搜索条件构建
        Example example = createExample(sysDept);
        //执行搜索
        return new PageInfo<SysDept>(sysDeptMapper.selectByExample(example));
    }

    /**
     * SysDept分页查询
     * @param page
     * @param size
     * @return
     */
    @Override
    public PageInfo<SysDept> findPage(int page, int size){
        //静态分页
        PageHelper.startPage(page,size);
        //分页查询
        return new PageInfo<SysDept>(sysDeptMapper.selectAll());
    }

    /**
     * SysDept条件查询
     * @param sysDept
     * @return
     */
    @Override
    public List<SysDept> findList(SysDept sysDept){
        //构建查询条件
        Example example = createExample(sysDept);
        //根据构建的条件查询数据
        return sysDeptMapper.selectByExample(example);
    }


    /**
     * SysDept构建查询对象
     * @param sysDept
     * @return
     */
    public Example createExample(SysDept sysDept){
        Example example=new Example(SysDept.class);
        Example.Criteria criteria = example.createCriteria();
        if(sysDept!=null){
            // 部门id
            if(!StringUtils.isEmpty(sysDept.getDeptId())){
                    criteria.andEqualTo("deptId",sysDept.getDeptId());
            }
            // 父部门id
            if(!StringUtils.isEmpty(sysDept.getParentId())){
                    criteria.andEqualTo("parentId",sysDept.getParentId());
            }
            // 祖级列表
            if(!StringUtils.isEmpty(sysDept.getAncestors())){
                    criteria.andEqualTo("ancestors",sysDept.getAncestors());
            }
            // 部门名称
            if(!StringUtils.isEmpty(sysDept.getDeptName())){
                    criteria.andEqualTo("deptName",sysDept.getDeptName());
            }
            // 显示顺序
            if(!StringUtils.isEmpty(sysDept.getOrderNum())){
                    criteria.andEqualTo("orderNum",sysDept.getOrderNum());
            }
            // 负责人
            if(!StringUtils.isEmpty(sysDept.getLeader())){
                    criteria.andEqualTo("leader",sysDept.getLeader());
            }
            // 联系电话
            if(!StringUtils.isEmpty(sysDept.getPhone())){
                    criteria.andEqualTo("phone",sysDept.getPhone());
            }
            // 邮箱
            if(!StringUtils.isEmpty(sysDept.getEmail())){
                    criteria.andEqualTo("email",sysDept.getEmail());
            }
            // 部门状态（0正常 1停用）
            if(!StringUtils.isEmpty(sysDept.getStatus())){
                    criteria.andEqualTo("status",sysDept.getStatus());
            }
            // 删除标志（0代表存在 2代表删除）
            if(!StringUtils.isEmpty(sysDept.getDelFlag())){
                    criteria.andEqualTo("delFlag",sysDept.getDelFlag());
            }
            // 创建者
            if(!StringUtils.isEmpty(sysDept.getCreateBy())){
                    criteria.andEqualTo("createBy",sysDept.getCreateBy());
            }
            // 创建时间
            if(!StringUtils.isEmpty(sysDept.getCreateTime())){
                    criteria.andEqualTo("createTime",sysDept.getCreateTime());
            }
            // 更新者
            if(!StringUtils.isEmpty(sysDept.getUpdateBy())){
                    criteria.andEqualTo("updateBy",sysDept.getUpdateBy());
            }
            // 更新时间
            if(!StringUtils.isEmpty(sysDept.getUpdateTime())){
                    criteria.andEqualTo("updateTime",sysDept.getUpdateTime());
            }
        }
        return example;
    }

    /**
     * 删除
     * @param id
     */
    @Override
    public void delete(Long id){
        sysDeptMapper.deleteByPrimaryKey(id);
    }

    /**
     * 修改SysDept
     * @param sysDept
     */
    @Override
    public void update(SysDept sysDept){
        sysDeptMapper.updateByPrimaryKey(sysDept);
    }

    /**
     * 增加SysDept
     * @param sysDept
     */
    @Override
    public void add(SysDept sysDept){
        sysDeptMapper.insert(sysDept);
    }

    /**
     * 根据ID查询SysDept
     * @param id
     * @return
     */
    @Override
    public SysDept findById(Long id){
        return  sysDeptMapper.selectByPrimaryKey(id);
    }

    /**
     * 查询SysDept全部数据
     * @return
     */
    @Override
    public List<SysDept> findAll() {
        return sysDeptMapper.selectAll();
    }
}
